Détection de piscines sur la base d’images aériennes
Introduction
Littérature liée
Données / Méthodologie
Résultats
Conclusion
Avec le changement climatique, l’usage de l’eau en été devient un enjeu croissant
Les piscines (privées) sont souvent au cœur des débats
Il n’y a pas de données centralisées en Suisse
Les piscines sont régies par le droit des constructions
Les données communales ne sont pas publiques (quand elles existent…)
Nouvelles méthodes et données à disposition
Séminaire basé sur deux “papiers”
Un rapport sur les aspects fiscaux
Un article sur les aspects techniques
Direction générale des Finances publiques. (2022). L’intelligence artificielle au service de la lutte contre la fraude : Bilan de l’expérimentation « Foncier innovant » (p. 9). https://www.impots.gouv.fr/sites/default/files/media/2_actu/home/2022/dp_foncier_innovant.pdf
Après une expérimentation dans 9 départements, plus de 20’000 piscines non déclarées ont été détectées
Recettes fiscales estimées à 10M € supplémentaires dans ces départements
Le projet a coûté 24M € sur 3 ans et devrait rapporter 40M € en une année pour la France (métropolitaine)
Peu de détails techniques si ce n’est que l’administration est accompagnée dans la mise en place, mais qu’elle garde la propriété intellectuelle des modèles
Utilisation uniquement des images aériennes publiques de l’IGN (sur un cloud)
Exemple de piscine détectée en France
Sánchez San Blas, H., Carmona Balea, A., Sales Mendes, A., Silva, L. A., & Villarrubia González, G. (2023). A Platform for Swimming Pool Detection and Legal Verification Using a Multi-Agent System and Remote Image Sensing. International Journal of Interactive Multimedia and Artificial Intelligence, 8(4), 153. https://doi.org/10.9781/ijimai.2023.01.002
Améliorer un processus manuel (!) afin de détecter le 20% de piscines en Espagne qui ne seraient pas déclarées
Comparaison de différentes sources et architectures de modèles
Comparaison de 3 modèles de détection :
YOLOv4 (You Only Look Once)
Mask R-CNN (Mask Region-Based Convolutional Neural Network)
Detectron2
YOLO obtient les meilleurs résultats dans le cas d’usage
YOLO est une architecture visant à accomplir de la détection d’image
Cela consiste à identifier l’emplacement des “objets” et à leur attribuer une classe
YOLO est un single-stage object detector, les objets et classes sont attribués pour l’image entière, elle ne passe donc qu’une fois dans le modèle
Exemple du workflow YOLO (Sánchez San Blas et al., 2023)
La tâche à effectuer est de la détection de classe unique (piscine)
Le jeu de données d’entraînement est composé de 999 images (799 train | 200 test) contenant 2300 piscines (1892 | 408)
Précision = \(\frac{TP}{TP + FP}\)
Recall = \(\frac{TP}{TP + FN}\)
F1 = \(2 \cdot \frac{\text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}}\)
La vitesse en FPS
L’Intersection over Union (IoU) (chevauchement des bounding boxes / la surface de leur union)
La mean average precision (mAP) (courbe de précision et recall en fonction de la confiance dans la détection)
Calcul d’IoU (https://pyimagesearch.com, 2016)
Le reste de l’article contient la description du système dans lequel s’intègre la détection
Les conclusions sont que le modèle YOLOv4 est le plus approprié et que des ajustements peuvent être faits selon l’objectif à atteindre
Monter le seuil de confiance à 25% au lieu de 10% pour améliorer la précision et utiliser des images plus précises malgré le temps de calcul plus important
swissIMAGE 10cm de swisstopo
Orthophotos pour toute la Suisse, images de 1\(km^{2}\)
2 résolutions : 0.1 (~ 55 Mo/img, 2.4To en tout) et 2 mètres
Extrait de Plan-les-Ouates, 0.1m, © swisstopo
Objectif : Réaliser, en local, un pipeline permettant d’automatiser la récupération d’images, la détection de piscines et l’affichage du résultat sur une carte interactive
Profiter de l’entraînement du modèle pour télécharger et pré-traiter les images de façon réutilisable
Via l’API Spatial Temporal Asset Catalog (STAC) de swisstopo
Téléchargement en indiquant une bounding box en coordonnées WGS84 (lat/long)
Données volumineuses –> Identifier des zones d’intérêt
Quelques hypothèses sur la localisation des piscines :
Dans des zones avec densité de logements \(< 3000 / km^{2}\)
En dessous de 1’000 mètres d’altitude
Conserver l’information spatiale en nommant selon les coordonnées (suisses) EEEE-NNNN.tif
Redécoupage en image de 1’000x1’000 pixels (100x100 mètres) EEEEE-NNNNN.tif
Conversion de (geo)tiff à jpeg EEEEE-NNNNN.jpg
À l’aide de Label Studio (en local), 300 images labellisées manuellement
Annotation au “format YOLO”
Les images et les annotations ont le même nom (extensions .jpg et .txt)
Exemple d’annotation au format YOLO
Exemple d’annotation du projet
Depuis la v5, YOLO vient avec différentes tailles de modèles (n, s, m, l, x)…et différentes versions (ex. YOLOv5 v6.0)
En très résumé, l’architecture est composée de l’ossature (backbone) et de la tête (head)
Le backbone prend en entrée l’image et en extrait la feature map
La head utilise les features maps pour faire les détections finales (bbox, classes, scores)
Conversion des bounding boxes en une couche de polygones
Chargement des polygones dans une carte leaflet
❌ Étape d’entraînement (pytorch)
Premier entraînement non échoué hier soir…mais présentation à terminer
Mes attentes | En vrai, un batch de validation
La réalité | Prédictions effectives du même batch
Une trentaine d’hyperparamètres ajustables
Data augmentation par défaut
Quelle architecture est la plus adaptée ?
Data augmentation par défaut | Batch de train
À quoi ressemblent les piscines sur les images ?
Identifier les bounding boxes adjacentes à un bord
Identifier quelle image vient à la suite et ses bbox
Définir un seuil au-delà duquel joindre les bbox en un seul polygone
Introduction au traitement d’images
Beaucoup de difficultés…mais beaucoup de leçons apprises
Commencer par le modèle aurait été plus judicieux